<?php
namespace app\common\utils;

use Ramsey\Uuid\Uuid;

/**
 * 唯一ID
 * 
 * UUID 文档：https://uuid.ramsey.dev/en/stable/
 */
class Unique
{
    /**
     * 生成UUID
     * Version 1/2 适合应用于分布式计算环境下，具有高度的唯一性；
     * Version 3/5 适合于一定范围内名字唯一，且需要或可能会重复生成UUID的环境下；
     * Version 4 使用伪随机数生成UUID，不推荐。
     * Version 6 使用有序时间生成UUID，可作用索引，推荐。
     *
     * @param integer $version 版本，默认1
     * @param string $name 命名空间
     * @return string
     */
    public function uuid($version = 1, $name = "")
    {
        switch ($version) {
            case 1:
                $uuid = Uuid::uuid1(); // 基于时间的UUID
                break;
            case 2:
                $uuid = Uuid::uuid2(Uuid::DCE_DOMAIN_PERSON); // DCE安全的UUID
                break;
            case 3:
                $uuid = Uuid::uuid3(Uuid::NAMESPACE_DNS, $name); // 基于名字的UUID（MD5）
                break;
            case 4:
                $uuid = Uuid::uuid4(); // 伪随机UUID
                break;
            case 5:
                $uuid = Uuid::uuid5(Uuid::NAMESPACE_DNS, $name); // 基于名字的UUID（SHA1）
                break;
            case 6:
                $uuid = Uuid::uuid6(); // 生成有序时间UUID（实验性）
                break;
            default:
                $uuid = Uuid::uuid1();
                break;
        }

        return $uuid->toString();
    }
}
